import java.util.*;
/*给定一种规律 pattern 和一个字符串 s ，判断 s 是否遵循相同的规律。
这里的 遵循 指完全匹配，例如， pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。具体来说：
pattern 中的每个字母都 恰好 映射到 s 中的一个唯一单词。
s 中的每个唯一单词都 恰好 映射到 pattern 中的一个字母。
没有两个字母映射到同一个单词，也没有两个单词映射到同一个字母。
输入: pattern = "abba", s = "dog cat cat dog"
输出: true
 */
public class Text {
    public static boolean check(String p, String s) {
        StringBuffer c = new StringBuffer();
        int j=1;
        for(int i=0;i<s.length();i++){
            if(s.charAt(i)==' ')j++;
        }
        String[] arr = new String[j]; // s.split(" ");
        int count = 0;
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == ' ') {
                arr[count] = c.toString();
                count++;
                c.setLength(0);
            } else {
                c.append(s.charAt(i));
                if (i == s.length() - 1) {
                    arr[count] = c.toString();
                    count++;
                }
            }
        }
        if(arr.length!=p.length())return false;
        Map<Character, String> mt = new HashMap<>();
        Map<String, Character> tm = new HashMap<>();
        for (int i = 0; i < p.length(); i++) {
            char a = p.charAt(i);
            String b = arr[i];
            if (mt.containsKey(a) && !mt.get(a).equals(b) || tm.containsKey(b) && tm.get(b) != a) {
                return false;
            }
            mt.put(a, b);
            tm.put(b, a);
        }
        return true;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String p = sc.nextLine();
        String s = sc.nextLine();
        boolean res = check(p, s);
        System.out.println(res);
    }
}